#include "controladorservicios.h"

namespace gge
{

ControladorServicios* ControladorServicios::ms_instance = 0;

ControladorServicios::ControladorServicios()
{
}

ControladorServicios::~ControladorServicios()
{
}

ControladorServicios* ControladorServicios::Instance()
{
	if(ms_instance == 0){
		ms_instance = new ControladorServicios();
	}
	return ms_instance;
}

void ControladorServicios::Release()
{
	delete ms_instance;
	ms_instance = 0;
}


Servicio *ControladorServicios::ObtenerServicio(IdServicios id_clase)
{
	Servicio * res=NULL;
	
	std::vector<Servicio>::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if (itServicios->ID_Servicio() == id_clase)
		{
			res = &(*itServicios);
		}
		itServicios++;
	}
	
	return res;
}

bool ControladorServicios::AgregarServicio(Servicio *pServicio)
{
	bool res=false;
	
	std::vector<Servicio >::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if ( itServicios->ID_Servicio() == pServicio->ID_Servicio())
		{
			break;
		}
		itServicios++;
	}
	
	if (itServicios == m_listaServicios.end())
	{
		m_listaServicios.push_back(*pServicio);
		res=true;
	}
	
	return res;
}

bool ControladorServicios::QuitarServicio(Servicio *pServicio)
{
	bool res=false;
	
	std::vector<Servicio >::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if ( itServicios->ID_Servicio() == pServicio->ID_Servicio())
		{
			break;
		}
		itServicios++;
	}
	
	if (itServicios != m_listaServicios.end())
	{
		itServicios->Terminar();
		m_listaServicios.erase(itServicios);
		res = true;	
	}
	
	return res;	
}

void ControladorServicios::Actualizar()
{
	std::vector<Servicio>::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if (itServicios-> EstaActivo())
		{
			itServicios->Ciclo();
		}
		itServicios++;
	}
}

void ControladorServicios::PausarServicios()
{
	std::vector<Servicio>::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if ( itServicios-> EstaActivo() )
		{
			itServicios->Pausar(true);
		}
		itServicios++;
	}
}

void ControladorServicios::TerminarServicios()
{
	std::vector<Servicio>::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if (itServicios->EstaActivo())
		{
			itServicios->Terminar();
		}
		itServicios++;
	}
}

void ControladorServicios::ReanudarServicios()
{
	std::vector<Servicio>::iterator itServicios = m_listaServicios.begin();
	
	while(itServicios != m_listaServicios.end())
	{
		if ( !itServicios->EstaActivo() )
		{
			itServicios->Pausar(false);
		}
		itServicios++;
	}
}

}